<?php
namespace app\common\logic;
class UploadLogic
{
    //系统配置
    private $sysConfig;

    /**
     * 构造函数
     * UploadLogic constructor.
     * @throws \Exception
     */
    public function __construct()
    {
        $this->sysConfig = SystemConfigLogic::getInfo();
        if (!$this->sysConfig) exception("配置信息不存在");
    }

    /**
     * 上传文件
     * @return string
     * @throws \Exception
     */
    public  function uploadFile(){
        if (!isset($_FILES) || empty($_FILES)) {
            exception("请至少上传一个文件");
        }
        $filePath=$_FILES['file']['tmp_name'];
        $fileName=$_FILES['file']['name'];
        $token=$this->getQiNiuToken();
        $objUpload=new  \Qiniu\Storage\UploadManager();
        $key=$this->getNewFileName($fileName);
        list($ret,$error)=$objUpload->putFile($token,$key,$filePath);
        if($error!=null)return $error;
        return $this->getQiNiuDomain().'/'.$ret['key'];
    }
    public  function getQiNiuDomain(){
        return $this->sysConfig['qiniu_domain'];
    }
    /**
     * 生成新文件名
     * @param $fileName
     * @return string
     */
    public  function getNewFileName($fileName)
    {
        $fileType = pathinfo($fileName, PATHINFO_EXTENSION);//获取文件后缀
        $pid = getmypid();//进程id。在同一台机器下高并发时，极易得到相同的毫秒
        time_nanosleep(0, 1000);//延时1000纳秒=1毫秒。同一进行连续使用本函数时，可能得到相同的毫秒，于是需要这个延时来保证每次得到的毫秒未被使用。
        $timetick = microtime(TRUE) * 1000;//微秒
        $uuid = hash('ripemd160', $pid . '+' . $timetick . '+' . $fileName);
        return $uuid . '.' . $fileType;
    }
    /**
     * 获取系统配置信息（主要用于后台编辑器上传图片）
     * @return array
     */
    public  function  getSysConfig(){
        $data = array(
            "imageUrl" => "http://upload.qiniup.com",
            "imageActionName" => "upload_image", /* 执行上传图片的action名称 */
            "imageFieldName" => "file", /* 提交的图片表单名称 */
            "imageMaxSize" => 2048000, /* 上传大小限制，单位B */
            "imageAllowFiles" => [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
            "imageCompressEnable" => true, /* 是否压缩图片,默认是true */
            "imageCompressBorder" => 1600, /* 图片压缩最长边限制 */
            "imageInsertAlign" => "none", /* 插入的图片浮动方式 */
            "imageUrlPrefix" =>"", /* 图片访问路径前缀 */
        );
        return $data;
    }
    /**
     * 获取七牛token
     * @return string
     */
    public function getQiNiuToken()
    {
        $auth = new \Qiniu\Auth($this->sysConfig["qiniu_access"], $this->sysConfig["qiniu_secrect_key"]);
        $token = $auth->uploadToken($this->sysConfig['qiniu_bucket']);
        return $token;
    }
}